# coding:utf-8
import cv2
import colorsys
from PIL import Image


def get_dominant_color(image):
	# 颜色模式转换，以便输出rgb颜色值
	image = image.convert('RGBA')

	# 生成缩略图，减少计算量，减小cpu压力
	image.thumbnail((200, 200))

	max_score = None
	dominant_color = None

	for count, (r, g, b, a) in image.getcolors(image.size[0] * image.size[1]):
		# 跳过纯黑色
		if a == 0:
			continue

		saturation = colorsys.rgb_to_hsv(r / 255.0, g / 255.0, b / 255.0)[1]

		y = min(abs(r * 2104 + g * 4130 + b * 802 + 4096 + 131072) >> 13, 235)

		y = (y - 16.0) / (235 - 16)

		# 忽略高亮色
		if y > 0.9:
			continue

		# Calculate the score, preferring highly saturated colors.
		# Add 0.1 to the saturation so we don't completely ignore grayscale
		# colors by multiplying the count by zero, but still give them a low
		# weight.
		score = (saturation + 0.1) * count

		if score > max_score:
			max_score = score
			dominant_color = (r, g, b)

	return dominant_color

def main(image):
	src = cv2.imread(image)
	gray = cv2.cvtColor(src,cv2.COLOR_RGB2GRAY)


	binary = cv2.threshold(gray, 180, 255, cv2.THRESH_BINARY)

	color = get_dominant_color(Image.open(src))
	red = color[2]
	blue = color[0]
	green = color[1]

	red_binary = cv2.threshold(red, 180, 255, cv2.THRESH_BINARY)

	cv2.imshow("src", src)
	cv2.imshow("gray", gray)
	cv2.imshow("binary", binary)
	cv2.imshow("red", red)
	cv2.imshow("blue", blue)
	cv2.imshow("green", green)
	cv2.imshow("red+binary", red_binary)


if __name__ == '__main__':
	image = '1.png'
	cv2.waitKey()


